home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / COOKIEJA.D < prev    next >
Encoding:
Modula Definition  |  1990-12-11  |  3.8 KB  |  90 lines

  1. DEFINITION MODULE CookieJar;
  2.  
  3. (*
  4.  * Cookies sind, ähnlich XBRA (s. entspr. Modul), im System global
  5.  * zugängliche Variablen. Sie bestehen jeweils aus einem Namen (4 Byte,
  6.  * möglichst ein lesbarer Text) und einem 32Bit-Wert. Sie werden vom
  7.  * Betriebssystem (im Atari STE und TT) oder von residenten Programmen
  8.  * eingetragen.
  9.  *
  10.  * Sie dienen dazu, eine statische Schnittstelle zu anderen Programmen
  11.  * herzustellen. Wenn beispielsweise ein residentes Programm (im AUTO-Ordner)
  12.  * einen Cookie anlegt, dessen Wert ein Zeiger auf einen eigenen Datenbereich
  13.  * ist, können andere Programme später diesen Cookie finden und auf die Daten
  14.  * des residenten Programms zugreifen.
  15.  *
  16.  * Atari hat weiterhin einige Cookies vordefiniert (s.u.), die den Rechner
  17.  * und seine Hardware beschreiben. Sie sind allerdings erst seit TOS 1.6,
  18.  * also z.Zt. nur beim Atari STE und TT vorhanden. Läßt sich also ein
  19.  * Atari-definierter Cookie nicht finden, kann davon ausgegangen werden,
  20.  * daß ein Atari ST vorliegt. Allerdings ist es auch möglich, daß residente
  21.  * Programme auf dem ST die Atari-Cookies nachtragen.
  22.  *
  23.  * VORSICHT: Wenn Sie selbst eigene Cookies eintragen wollen, müssen Sie
  24.  * einiges mehr an Wissen darüber haben (z.B. Atari STE TOS Release Notes
  25.  * vom 12.1.90). Vor allem sollten Sie Cookies nur in residenten Programmen
  26.  * erzeugen, jedoch NIE in Accessories. Für Accessories gibt es im übrigen
  27.  * eine bessere Methode: Die AES-Funktionen 'FindApplication', 'WriteToAppl'
  28.  * und 'ReadFromAppl' (Modul AESMisc)!
  29.  *)
  30.  
  31.  
  32. FROM SYSTEM IMPORT LONGWORD;
  33.  
  34. PROCEDURE GetCookie (cookie: LONGWORD; VAR value: LONGWORD): BOOLEAN;
  35.   (*
  36.    * Liefert TRUE, wenn der übergebene Cookie gefunden wird. Liefert
  37.    * dann in 'value' den dazugehörigen Lognword-Wert, bei FALSE ist
  38.    * 'value' immer Null. Die von Atari vordefinierten Cookies finden
  39.    * sich weiter unten.
  40.    *
  41.    * Wird beispielsweise nur das 1. Word des Wertes als SHORTCARD benötigt,
  42.    * kann eine Variable vom Typ "SysTypes.AnyLongType" übergeben und
  43.    * der SHORTCARD dann über das Record-Feld "c1" erreicht werden.
  44.    *)
  45.  
  46. PROCEDURE ModifyCookie (cookie: LONGWORD; newvalue: LONGWORD): BOOLEAN;
  47.   (*
  48.    * Sucht, wie 'GetCookie', den Cookie und liefert FALSE, wenn er nicht
  49.    * vorhanden ist. Wird er gefunden, wird 'newvalue' als neuer Cookie-Wert
  50.    * eingesetzt und die Funktion liefert TRUE.
  51.    *
  52.    * Hiermit werden also keine neuen Cookies eingetragen sondern nur
  53.    * vorhandene modifiziert!
  54.    *)
  55.  
  56. TYPE CookieProc = PROCEDURE (     (* cookie: *) LONGWORD,
  57.                               VAR (* value : *) LONGWORD ): BOOLEAN;
  58.  
  59. (*$H+*)
  60. PROCEDURE QueryCookies (with: CookieProc);
  61.   (*
  62.    * Geht die Liste aller Cookies durch und ruft 'with' für jeden vorhandenen
  63.    * Cookie auf. Der Wert wird dabei als VAR-Parameter übergeben und kann
  64.    * somit verändert werden.
  65.    * Die 'with'-Funktion muß einen BOOLEAN-Wert zurückgeben. Ist er FALSE,
  66.    * wird die Query-Funktion abgebrochen, bei TRUE werden weitere Cookies
  67.    * durchgegangen.
  68.    *
  69.    * Wegen des $H+ (s.o.) ist es möglich, auch lokale Prozeduren an 'with'
  70.    * zu übergeben (ist aber nicht portabel!).
  71.    *
  72.    * Das Modul 'ShowCookies' im UTILITY-Ordner zeigt die Anwendung dieser
  73.    * Prozedur.
  74.    *)
  75.  
  76. CONST
  77.  
  78.    (*
  79.     * Von Atari vordefinierte Cookies, die den Rechner beschreiben.
  80.     *)
  81.   CPU            = "_CPU"; (* Hauptprozessor: 0, 10, 20, 30 usw. *)
  82.   FPU            = "_FPU"; (* Mathe-Koprozessor: 0,1,2 im 1. Word *)
  83.   Machine        = "_MCH"; (* Rechner; 1. Word: 0=ST, 1=STE, 2=TT *)
  84.   VideoShifter   = "_VDO"; (* Video-Hardware; 1. Word: 0=ST, 1=STE, 2=TT *)
  85.   SoundHardware  = "_SND"; (* Bits im Longword: 0: GI/Yamaha(ST), 1: DMA(TT) *)
  86.   ConfigSwitches = "_SWI"; (* BIOS-interne Konfigurationswerte *)
  87.   FastReadBuffer = "_FRB"; (* Adresse des 64KB-Puffers f. Disk-Treiber im TT *)
  88.  
  89. END CookieJar.
  90.